package com.exam.api.modules.system.service;

import cn.hutool.core.lang.tree.Tree;
import com.exam.api.modules.system.domain.TblMenu;
import com.exam.api.modules.system.dto.MenuAddDTO;
import com.exam.api.modules.system.dto.MenuIdDTO;
import com.exam.api.modules.system.dto.MenuQueryDTO;
import com.exam.api.modules.system.dto.MenuUpdateDTO;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.validation.annotation.Validated;

import java.util.List;

/**
 * 菜单逻辑接口类
 *
 * @author bcheng
 */
public interface TblMenuService extends IService<TblMenu> {


    List<Tree<Long>> listManagerMenuTree(@Validated MenuQueryDTO dto);

    /**
     * 根据用户id查询权限Code列表
     *
     * @param userId 用户id
     * @return 权限Code列表
     */
    List<String> listPermissionCodes(Long userId);


    /**
     * 查询菜单
     *
     * @param dto 查询条件
     * @return 菜单树
     */
    List<Tree<Long>> treeMenu(MenuQueryDTO dto);

    /**
     * 根据菜单id查询菜单
     *
     * @param dto 菜单id
     * @return 菜单
     */
    TblMenu getMenu(MenuIdDTO dto);

    /**
     * 新增菜单
     *
     * @param dto 新增菜单信息
     */
    void addMenu(MenuAddDTO dto);

    /**
     * 修改菜单
     *
     * @param dto 修改菜单信息
     */
    void updateMenu(MenuUpdateDTO dto);

    /**
     * 删除菜单
     *
     * @param dto 菜单id
     */
    void deleteMenu(MenuIdDTO dto);

    /**
     * 查询当前登录用户的权限Code列表
     * @return 权限Code列表
     */
    List<String> listManagerPermissionCodes();
}
